home *** CD-ROM | disk | FTP | other *** search
/ CU Amiga Super CD-ROM 18 / CU Amiga Magazine's Super CD-ROM 18 (1997)(EMAP Images)(GB)[!][issue 1998-01].iso / CUCD / Online / AList / src / aladd.e next >
Encoding:
Text File  |  1997-10-20  |  6.9 KB  |  187 lines

  1. /* ALAdd.M */
  2.  
  3. OPT MODULE
  4. OPT EXPORT
  5.  
  6. /* This module contains all the functions to build the temp file to send. */
  7. MODULE 'dos/dos'
  8. MODULE 'other/allog'
  9.  
  10. DEF temp_file:PTR TO CHAR
  11.  
  12. /*
  13.  * Clears the temp file out, also allocates the temp_file string if necissary
  14.  */
  15. PROC clear_tmp_file ()
  16.    DEF fd
  17.  
  18.    IF (temp_file = NIL)
  19.       temp_file := String (11)
  20.       StrCopy (temp_file, 'T:AList.tmp')
  21.    ENDIF
  22.  
  23.    fd := Open (temp_file, MODE_NEWFILE)
  24.    IF (fd = NIL)
  25.       /* We'll be generating a WHOLE lot of problems if we can't get this open! */
  26.       log_message ('Unable to open work file!\n', LOG_FATAL)
  27.       CleanUp (50)
  28.    ELSE
  29.       Close (fd)
  30.    ENDIF
  31. ENDPROC
  32.  
  33.  
  34. /*
  35.  * Adds a string to the temporary work file.
  36.  *
  37.  * Must first call clear_tmp_file() before using this!
  38.  */
  39. PROC add_tmp_file (str)
  40.    DEF fd
  41.  
  42.    IF (IF (str = NIL)  THEN FALSE ELSE (str[0] = NIL))  THEN RETURN
  43.  
  44. /* Not the most efficient way to do this, but the safest */
  45.    fd := Open (temp_file, MODE_READWRITE)
  46.    IF (fd)
  47.       Seek (fd, 0, OFFSET_END)
  48.       Fwrite (fd, str, 1, StrLen (str))
  49.       Close (fd)
  50.    ENDIF
  51. ENDPROC
  52.  
  53.  
  54. /*
  55.  * Calls add_tmp_file for a chain of strings
  56.  */
  57. PROC fill_tmp_file (str:PTR TO CHAR)
  58.    WHILE (str)
  59.       add_tmp_file (str)
  60.       str := Next (str)
  61.    ENDWHILE
  62. ENDPROC
  63.  
  64.  
  65. /*
  66.  * Not really for handling temp files, but used in conjunction...
  67.  *
  68.  * Adds an object onto the tail of a chain, specifically, estrings, returning the list head.
  69.  */
  70. PROC add_link (str1, str2)
  71.    DEF str3
  72.  
  73.    IF (str1 = NIL)  THEN RETURN str2
  74.  
  75.    str3 := str1
  76.    WHILE (Next (str3))
  77.       str3 := Next (str3)
  78.    ENDWHILE
  79.  
  80.    Link (str3, str2)
  81. ENDPROC str1
  82.  
  83.  
  84. /*
  85.  * Adds the help command(s) specified to the tmp file
  86.  */
  87. PROC add_tmp_help (str:PTR TO CHAR)
  88.    IF (IF (str[0] = 0)  THEN TRUE ELSE StrCmp (str, 'HELP', 4))
  89.       add_tmp_file ('\tHELP [cmd]\t\tReturns help for all commands, or only one\n' +
  90.                     '\t\t\t\tspecific command.\n\n')
  91.    ENDIF
  92.    IF (IF (str[0] = 0)  THEN TRUE ELSE StrCmp (str, 'INDEX', 5))
  93.       add_tmp_file ('\tINDEX\t\t\tProduces a list of all the visible lists on\n' +
  94.                     '\t\t\t\tthis server, along with the one-line\n'+
  95.                     '\t\t\t\tdescriptions for each.\n\n')
  96.    ENDIF
  97.    IF (IF (str[0] = 0)  THEN TRUE ELSE StrCmp (str, 'LIST', 4))
  98.       add_tmp_file ('\tLIST [addr]\t\tProduces a list of all the lists you are\n' +
  99.                     '\t\t\t\tsubscribed to, or all the visible lists\n' +
  100.                     '\t\t\t\t<addr> is subscribed to.\n\n')
  101.    ENDIF
  102.    IF (IF (str[0] = 0)  THEN TRUE ELSE StrCmp (str, 'WHO', 3))
  103.       add_tmp_file ('\tWHO [list]\t\tLists the members of a list, if allowed.\n\n')
  104.    ENDIF
  105.    IF (IF (str[0] = 0)  THEN TRUE ELSE StrCmp (str, 'ADD', 3))
  106.       add_tmp_file ('\tADD [list][addr]\tAdds <addr> to the given list, if allowed.\n'+
  107.                     '\t\t\t\tIf no <addr> is specified, the email address\n'+
  108.                     '\t\t\t\tyou send this command from will be used in\n'+
  109.                     '\t\t\t\tits place.\n\n')
  110.    ENDIF
  111.    IF (IF (str[0] = 0)  THEN TRUE ELSE StrCmp (str, 'DELETE', 6))
  112.       add_tmp_file ('\tDELETE [list][add]\tRemoves <addr> from the given list, if\n'+
  113.                     '\t\t\t\tallowed.  If no <addr> is specified, the\n'+
  114.                     '\t\t\t\temail address you send this command from\n'+
  115.                     '\t\t\t\twill be used in its place.\n\n')
  116.    ENDIF
  117.    IF (IF (str[0] = 0)  THEN TRUE ELSE StrCmp (str, 'SUBSCRIBE', 9))
  118.       add_tmp_file ('\tSUBSCRIBE [list][addr]\tSee ADD.\n\n')
  119.    ENDIF
  120.    IF (IF (str[0] = 0)  THEN TRUE ELSE StrCmp (str, 'UNSUBSCRIBE', 11))
  121.       add_tmp_file ('\tUNSUBSCRIBE [list][addr] See DELETE.\n\n')
  122.    ENDIF
  123.    IF (IF (str[0] = 0)  THEN TRUE ELSE StrCmp (str, 'INFO', 4))
  124.       add_tmp_file ('\tINFO [list]\t\tSimilar to LONGINDEX, but for a specific list.\n\n')
  125.    ENDIF
  126.    IF (str[0] = 0)
  127.       add_tmp_file ('\nNOT YET IMPLIMENTED:\n\n')
  128.       add_tmp_file ('\tLONGINDEX\t\tLists a multiple-line description for all\n'+
  129.                     '\t\t\t\tvisible lists, if they have one, and if\n'+
  130.                     '\t\t\t\tit is allowed.\n\n')
  131.       add_tmp_file ('\tADD-ALL [addr]\t\tAdds the <addr> to every visible list, if\n'+
  132.                     '\t\t\t\tallowed.  If no <addr> is specified, the\n'+
  133.                     '\t\t\t\temail address you send this command from\n'+
  134.                     '\t\t\t\twill be used in its place.\n\n')
  135.       add_tmp_file ('\tDELETE-ALL [addr]\tRemoves the <addr> from every list it is\n'+
  136.                     '\t\t\t\tsubscribed to, if allowed.  If no <addr> is\n'+
  137.                     '\t\t\t\tspecified, the email address you send this\n'+
  138.                     '\t\t\t\tcommand from will be used in its place.\n\n')
  139.       add_tmp_file ('\tFAQ [list]\t\tRetrieves the FAQ for the given list.\n\n')
  140.       add_tmp_file ('\tDIR [list]\t\tRetrieves the directory listing for the given\n'+
  141.                     '\t\t\t\tlist, if there is one, and if allowed.\n\n')
  142.       add_tmp_file ('\tGET [list] file\t\tRetrieves the <file> from the list\as\n'+
  143.                     '\t\t\t\tdirectory, if it has one, and if it is\n'+
  144.                     '\t\t\t\tallowed.  The file will be uuencoded\n'+
  145.                     '\t\t\t\tbefore sending.\n\n')
  146.       add_tmp_file ('\tPUT [list] file\t\tUudecodes and stores the rest of the message\n'+
  147.                     '\t\t\t\tunder the filename <file> in the list\as\n'+
  148.                     '\t\t\t\tdirectory, if it has one, and if you are\n'+
  149.                     '\t\t\t\tallowed to.\n\n')
  150.       add_tmp_file ('\tAPPROVE password cmd\tSpecified a password for commands which\n'+
  151.                     '\t\t\t\trequire one.\n\n')
  152.       add_tmp_file ('\tSETKEY [list] [user]\tTreats the rest of the file, up to the next\n'+
  153.                     '\t\t\t\tblank line, as the user\as public key.\n'+
  154.                     '\t\t\t\tRequired on some encoded lists for\n'+
  155.                     '\t\t\t\tencryption before sending.\n\n')
  156.       add_tmp_file ('\tPUTFAQ [list]\t\tConsiders the rest of the mail, up until\n' +
  157.                     '\t\t\t\tENDFAQ on a line by itself, to be the new\n' +
  158.                     '\t\t\t\tFAQ for the list.  Requires the list\as\n'+
  159.                     '\t\t\t\tadministration password.\n\n')
  160.       add_tmp_file ('\tCONFIG [list]\t\tReturns the current config file for the list.\n'+
  161.                     '\t\t\t\tRequires the list\as administration password.\n\n')
  162.       add_tmp_file ('\tNEWCONFIG [list]\tConsiders the rest of the mail, up until\n'+
  163.                     '\t\t\t\tENDCONFIG on a line by itself, to be the new\n'+
  164.                     '\t\t\t\tconfig file for the list.  Requires the\n'+
  165.                     '\t\t\t\tlist\as administration password.\n\n')
  166.    ENDIF
  167. ENDPROC
  168.  
  169.  
  170. /*
  171.  * Another one that is only here because it's about the best place for it.
  172.  *
  173.  * Counts the number of times 'ch' appears in 'str'.
  174.  */
  175. PROC count (str:PTR TO CHAR, ch)
  176.    DEF x, y
  177.  
  178.    x := y := 0
  179.  
  180.    WHILE (str[x])
  181.       IF (str[x] = ch)  THEN INC y
  182.       INC x
  183.    ENDWHILE
  184. ENDPROC y
  185.  
  186.  
  187.